package com.eagle.functioninterface;

import org.junit.Test;

import java.util.Objects;
import java.util.function.Supplier;

/**
 * {@link Supplier} 接口是从无到有的一个函数式接口
 * 与其类似的有{@link java.util.concurrent.Callable} 函数式接口
 * <p>
 * 与其完全相反的接口是{@link java.util.function.Consumer}
 * 其实函数式编程只关注入参和出参，跟方法名无任何关系。
 *
 * @author qinlinsen
 */
public class SupplierTest6 {
    @Test
    public void testSupplier() {
        //得到一个整数
        Integer result = get(() -> 3);
        String str = get(() -> "hello");
        System.out.println(String.format("result=%s", result));
        System.out.println(String.format("str=%s", str));
    }

    private <T> T get(Supplier<T> factory) {
        Objects.requireNonNull(factory);
        T result = factory.get();
        return result;
    }
}
